`timescale 1ns / 1ps
`include "defines.v"
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2021/12/09 09:16:31
// Design Name: 
// Module Name: ex_mem
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module ex_mem(
    input wire clk,
    input wire rst,

    // 来自执行阶段的信息
    input wire[`RegAddrBus] ex_wd,      // 执行阶段目的寄存器地址
    input wire ex_wreg,                 // 执行阶段是否要写寄存器
    input wire[`RegBus] ex_wdata,       // 执行阶段要写入的值

    // 送入访存阶段的信息
    output reg[`RegAddrBus] mem_wd,     // 访存阶段要写入的寄存器地址
    output reg mem_wreg,                // 访存阶段是否要写寄存器
    output reg[`RegBus] mem_wdata        // 访存阶段要写的数据
    );

    // 时钟上升沿传递数据
    always @ (posedge clk) begin
        if (rst == `RstEnable) begin
            mem_wd <= `NOPRegAddr;
            mem_wreg <= `WriteDisable;
            mem_wdata <= `ZeroWord;
        end else begin
            mem_wd <= ex_wd;
            mem_wreg <= ex_wreg;
            mem_wdata <= ex_wdata;
        end
    end
endmodule
